package com.kun.utils;

import cn.hutool.core.util.XmlUtil;
import com.kun.activiti.ControlForm;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.util.Set;
import java.util.stream.Collectors;

public class BpmnUtils {

    /**
     * 根据xml解析 userTask 中表单信息
     *
     * @return 返回 控件集合
     */
    public static Set<ControlForm> getFormKey(String xml, String formKey) {
        Document document = XmlUtil.readXML(xml);
        // userTask
        NodeList userTask = document.getElementsByTagName("userTask");

        return XmlUtils.findChildren(userTask).stream()
                .filter(node -> node.getAttributes().getNamedItem("id").getNodeValue().equals(formKey))
                .flatMap(node -> XmlUtils.findChildrenByName(node.getChildNodes(),
                        "extensionElements").stream().flatMap(extension ->
                        XmlUtils.findChildrenByName(extension.getChildNodes(), "activiti:formProperty").stream()
                                .map(formproperty -> {
                                    Node id = formproperty.getAttributes().getNamedItem("id");
                                    Node type = formproperty.getAttributes().getNamedItem("type");
                                    Node label = formproperty.getAttributes().getNamedItem("label");
                                    Node defaultValue = formproperty.getAttributes().getNamedItem("defaultValue");
                                    return new ControlForm(id.getNodeValue(), label.getNodeValue(), type.getNodeValue(),
                                            defaultValue == null ? "" : defaultValue.getNodeValue());
                                }))).collect(Collectors.toSet());
    }


}
